package logica.partidas;

import java.io.Serializable;
import logica.peliculas.Pelicula;

public class Partida implements Serializable{

	private static final long serialVersionUID = 1L;

	private int idPartida;   
	private int puntaje;
	private boolean estaFinalizada;
	private boolean estaAcertada;
	private String textoAdivinado;
	private Pelicula peliculaDeLaPartida;
	
	//Constructores
	public Partida() {
		idPartida=0;
		puntaje=0;
		estaFinalizada=false;
		estaAcertada=false;
		textoAdivinado=null;
		peliculaDeLaPartida = new Pelicula();
	}
	public Partida(int id,int puntos,boolean finalizada,boolean acertada,String texto,Pelicula peli){
		idPartida=id;
		puntaje=puntos;
		estaFinalizada=finalizada;
		estaAcertada=acertada;
		textoAdivinado=texto;
		peliculaDeLaPartida = new Pelicula(peli.getTitulo(),peli.getDescripcion());
	}	
	//Selectoras y modificadores
	public int getIdPartida(){
		return idPartida;
	}
	
	public void setIdPartida(int id){
		idPartida=id;
	}
	
	public int getPuntaje(){
		return puntaje;
	}
	
	public void setPuntaje(int puntos){
		puntaje=puntos;
	}	
	
	public boolean getEstaFinalizada(){
		return estaFinalizada;
	}
	
	
	public void setFinalizada(boolean finalizada){
		estaFinalizada=finalizada;
	}
	
	public boolean getEstaAcertada(){
		return estaAcertada;
	}
	
	public void setEstaAcertada(boolean acertada){
		estaAcertada=acertada;
	}
	
	public String getTextoAdivinado(){
		return textoAdivinado;
	}
	
	
	public void setPelicula(Pelicula pelicula){
		 peliculaDeLaPartida=pelicula;
	}
	public void setTextoAdivinado(String texto){
		textoAdivinado=texto;
		}
	
	public Pelicula getPelicula() {
		
		return peliculaDeLaPartida;
	}
	//metodos especificos
	public boolean arriesgarPelicula(String tituloPelicula){
		boolean acierto=false;
		if(tituloPelicula.equals(peliculaDeLaPartida.getTitulo()))
			acierto=true;
		return acierto;		
	}
	
	public boolean chequearLetra(char letra){
		String texto = peliculaDeLaPartida.getTitulo(); //Hay que cambiar texto por el titulo de la pelicula
		boolean existe = false;
		letra = Character.toUpperCase(letra);
		if(texto.indexOf(letra, 0)!=-1)
			existe = true;
		return existe;
	}
	
	public int cantidadOcurrencias(String cadena, char caracter) {
		if (cadena.equals("")) {
			return 0; 
		} else
			if (cadena.charAt(0) != caracter) {
				cadena = cadena.substring(1, cadena.length());
				return cantidadOcurrencias(cadena, caracter) + 0;
			} 
			cadena = cadena.substring(1, cadena.length());
			return cantidadOcurrencias(cadena, caracter) + 1;
	}
	
	public int[] devolverPosiciones(String texto, char letra){// Auxiliar de sustituir letra
		int cantidadRepetidas = cantidadOcurrencias(texto, letra);
		int posiciones [] = new int[cantidadRepetidas];
		int indice = texto.indexOf(letra, 0);
		int i=0;
		posiciones[i] = indice;
		while (indice != -1){
			i++;
			
			indice = texto.indexOf(letra, indice+1);
			if(indice!=-1)
				posiciones[i]=indice;
		}
		return posiciones;
	}
	
	public void sustituirLetra(char letra){
		
		letra = Character.toUpperCase(letra);
		String texto = peliculaDeLaPartida.getTitulo();
		char[] caracteres=textoAdivinado.toCharArray();
		  int posicionesAModificar [] = devolverPosiciones(texto, letra);
		  for(int i = 0;i<posicionesAModificar.length;i++){
		  caracteres[posicionesAModificar[i]]=letra;
		
		 }
		 textoAdivinado=String.valueOf(caracteres);
		

	}
	
	public boolean letraIngresada(char c){
		boolean estaIngresada = false;
		c = Character.toUpperCase(c);
		if(textoAdivinado.indexOf(c)!=-1){
			estaIngresada = true;
		}
		return estaIngresada;
	}
	
	
	
}
